package bszt.kedaxunfei;

import java.util.Scanner;

public class Code03 {

    /**
     * 问题描述
     * K小姐是一位魔法森林的探险家。她发现森林中有n个魔法树，每棵树都有一个魔力值
     * K小姐可以从任意一棵树开始探险，初始时她的魔力值等于起始树的魔力值
     * 在探险过程中，她可以向左或向右移动到相邻的树，但只有当下一棵树的魔力值大于她当前的总魔力值时，她才能移动。每移动到一棵新树，她就会获得该树的魔力值，累加到她的总魔力值中
     * K小姐想知道，如果从每棵树开始探险，她最多能获得多少魔力值
     * <p></p>
     * 输入格式
     * 第一行包含一个正整数n，表示魔法树的数量
     * 第二行包含n个正整数a_i，表示每棵魔法树的魔力值
     * <p></p>
     * 输出格式
     * 输出一行，包含n个整数，第i个整数表示从第i棵树开始探险能获得的最大魔力值
     */

    static int n;
    static int[] trees;
    static int maxPower;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        trees = new int[n];
        for (int i = 0; i < n; i++) {
            trees[i] = sc.nextInt();
        }

        // 对每棵树进行探险
        for (int i = 0; i < n; i++) {
            maxPower = 0;
            dfs(i - 1, i + 1, trees[i]);
            System.out.print(maxPower + (i == n - 1 ? "\n" : " "));
        }
    }

    // DFS函数
    static void dfs(int left, int right, int currentPower) {
        maxPower = Math.max(maxPower, currentPower);

        // 向左探索
        if (left >= 0 && trees[left] > currentPower) {
            dfs(left - 1, right, currentPower + trees[left]);
        }

        // 向右探索
        if (right < n && trees[right] > currentPower) {
            dfs(left, right + 1, currentPower + trees[right]);
        }
    }
}
